package com.lkdont.android.base.ui

import android.content.Context
import android.content.Intent
import android.widget.Toast
import androidx.annotation.StringRes
import com.lkdont.android.base.util.PermissionUtils

/**
 * 用户操作界面（Activity、Fragment的基类）
 *
 * @author lqd
 */
interface UserInterface {

    /**
     * 获取Context
     *
     * @return Context上下文，可能为空
     */
    fun getContext(): Context?

    /**
     * 获取Context
     *
     * @return Context上下文，一定不为空，因为Context为空的时候直接抛出[IllegalStateException]错误
     */
    fun requireContext(): Context

    //******************************** Activity相关 ********************************//

    fun startActivity(intent: Intent?)

    fun startActivityForResult(intent: Intent?, requestCode: Int)

    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)

    //******************************** 权限相关 ********************************//

    /**
     * 请求权限
     */
    fun requestPermissions(
        permissions: Array<String>,
        requestCode: Int
    )

    /**
     * 请求权限回调
     */
    fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    )

    /**
     * 检查是否拥有[permissions]列表中的所有权限
     */
    fun hasPermissions(permissions: Array<String>) =
        PermissionUtils.hasPermissions(requireContext(), permissions)

    //******************************** 提示相关 ********************************//

    /**
     * 显示信息
     */
    fun showMessage(@StringRes msgResId: Int) {
        val ctx = getContext() ?: return
        Toast.makeText(ctx, msgResId, Toast.LENGTH_SHORT).show()
    }

    /**
     * 显示信息
     */
    fun showMessage(msg: String?) {
        if (msg.isNullOrEmpty()) {
            return
        }
        val ctx = getContext() ?: return
        Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show()
    }
}